import org.junit.jupiter.api.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;

/**
 * @author xufeng
 * @date 2023-04-28
 */
public class MonthDayDemo {
}

class MonthDayDemo01 {

    /**
     * from(TemporalAccessor temporal)
     * 作用：从其他含有月日数据的时间对象中获取monthDay对象。
     */
    @Test
    public void test01(){
        LocalDate date01 = LocalDate.parse("2023-01-01");
        System.out.println(MonthDay.from(date01)); // 输出 --01-01
    }

    /**
     * now()
     * 作用：从操作系统获取月日数据。
     *
     * now(ZoneId zone)
     * 作用：获取某个时区此刻的月日数据。
     *
     * now(Clock clock)
     * 作用：从clock对象获取月日数据。clock对象有时区的概念，所以获取的是跟地区相关的数据。
     */
    @Test
    public void test02(){
        System.out.println(MonthDay.now()); // 输出 --05-09

        ZoneId zoneOffset = ZoneId.of("-18:00");
        System.out.println(MonthDay.now(zoneOffset)); // 输出 --05-08

        Instant instant01 = Instant.parse("2023-04-01T05:00:00Z");
        ZoneId zoneId01 = ZoneId.of("America/Los_Angeles");
        Clock fixedClock01 = Clock.fixed(instant01, zoneId01);
        System.out.println(MonthDay.now(fixedClock01)); // 输出 --03-31
    }

    /**
     * of(int month, int dayOfMonth)
     * of(Month month, int dayOfMonth)
     * 作用：给定月日数据生成monthDay对象。
     */
    @Test
    public void test03(){
        System.out.println(MonthDay.of(2, 1)); // 输出 --02-01
        System.out.println(MonthDay.of(Month.FEBRUARY, 1)); // 输出 --02-01
    }

    /**
     * parse(CharSequence text)
     * parse(CharSequence text, DateTimeFormatter formatter)
     * 作用：将字符串解析成monthDay对象，默认格式“--MM-dd”，formatter指定字符串格式。
     */
    @Test
    public void test04(){
        System.out.println(MonthDay.parse("--02-01")); // 输出 --02-01

        DateTimeFormatter df01 = DateTimeFormatter.ofPattern("MM-dd");
        System.out.println(MonthDay.parse("02-01", df01)); // 输出 --02-01
    }
}

class MonthDayDemo02{

    /**
     * atYear(int year)
     * 作用：补充年份数据生成localDate对象。
     */
    @Test
    public void test01(){
        MonthDay monthDay01 = MonthDay.parse("--02-01");
        LocalDate date01 = monthDay01.atYear(2023);
        System.out.println(date01); // 输出 2023-02-01
    }

    /**
     * isValidYear(int year)
     * 作用：检查指定年份是否适用于monthDay对象。
     */
    @Test
    public void test02(){
        MonthDay monthDay01 = MonthDay.parse("--02-29");
        MonthDay monthDay02 = MonthDay.parse("--02-28");

        System.out.println(monthDay01.isValidYear(2000)); // 输出 true
        System.out.println(monthDay01.isValidYear(2023)); // 输出 false
        System.out.println(monthDay02.isValidYear(2023)); // 输出 true
    }
}




